home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Mission 3
/
Mission 3.zip
/
Mission 3.iso
/
demovers
/
facevalu
/
examples
/
ex
/
ex.txt
next >
Wrap
Text File
|
1998-09-08
|
9KB
|
241 lines
An dieser Stelle soll einmal demonstriert werden, wie wenig
Programmierarbeit in diesem Beispielprogramm steckt.
Zunächst werden ganz zu Beginn die Listboxen mit Texten gefüllt und
ein selbstdefinierter Numberscroller eingerichtet:
PROCEDURE user_rsc_var_init
'
b&=65
FOR a&=0 TO 19
radio_lstbox_arr$(a&)=CHR$(b&)+" Radio "+STR$(a&+1)
checl_lstbox_arr$(a&)=CHR$(b&)+" Check "+STR$(a&+1)
menu_lstbox_arr$(a&)=CHR$(b&)+" Menu "+STR$(a&+1)
LET open_listbox1_arr$(a&)="Menu "+STR$(a&+1)
LET open_lstbox2_arr$(a&)="Radio "+STR$(a&+1)
LET open_lstbox3_arr$(a&)="Check "+STR$(a&+1)
INC b&
NEXT a&
'
@slidemover_set(input&,slider&,slider&,10,0,127,3,TRUE)
'
RETURN
Dann wird die Datei EX.TXT (das ist die Datei, die Sie gerade lesen)
eingeladen.
PROCEDURE user_on_open
'
' Lade Datei EX.TXT
'
LOCAL num_lines&,file$
'
num_lines&=250
DIM txt$(num_lines&),txt!(num_lines&)
LET file$="EX.TXT"+CHR$(0)
LET fh&=GEMDOS(61,L:V:file$,0)
IF fh&=>0
LET txt%=MAX(1,@fread_to_array(fh&,-1,txt$()))
ELSE
LET txt%=0
ENDIF
'
RETURN
In der von faceVALUE vorbereiteten Prozedur "user_rsc_interact" wird
nun eingetragen, was beim Anwählen der einzelnen Dialogknöpfe und
Menüpunkte passieren soll.
PROCEDURE user_rsc_interact(index&,tree&,object&,mc&,sub_me&)
'
SELECT tree&
'
CASE buttons&
SELECT object&
CASE close_buttons&
@win_close(@find_handle_from_tree(tree&))
ENDSELECT
'
CASE checks&
SELECT object&
CASE check_close&
@win_close(@find_handle_from_tree(tree&))
ENDSELECT
'
CASE radios&
SELECT object&
CASE radios_close&
@win_close(@find_handle_from_tree(tree&))
ENDSELECT
'
CASE input&
SELECT object&
CASE slider&
a&=@slidemover(index&,slider&,slider&,0,127,3,TRUE)
CASE callback&
@rsc_set_text(tree&,show_callback&,callback_var$)
@rsc_ob_draw(index&,show_callback&)
CASE input_close&
@win_close(@find_handle_from_tree(tree&))
ENDSELECT
'
CASE popups&
SELECT object&
CASE popup_close&
@win_close(@find_handle_from_tree(tree&))
ENDSELECT
'
CASE listbxes&
SELECT object&
CASE lstbox_close&
@win_close(@find_handle_from_tree(tree&))
ENDSELECT
'
CASE mstate&
SELECT object&
CASE mstate_close&
@win_close(@find_handle_from_tree(tree&))
ENDSELECT
'
CASE other&
SELECT object&
CASE misc_close&
@win_close(@find_handle_from_tree(tree&))
ENDSELECT
'
CASE resize_me&
SELECT object&
CASE resize_close&
@win_close(@find_handle_from_tree(tree&))
ENDSELECT
'
CASE foldable&
SELECT object&
CASE foldable_close&
@win_close(@find_handle_from_tree(tree&))
ENDSELECT
'
CASE menu&
SELECT object&
CASE about&
~@alert_wind(1,fv_copyright&,"")
CASE demo_quit&
exit_program!=TRUE
CASE m_buttons&
~@win_open_dialog(prg_modal_var&,buttons&,iconify_icon_1&)
CASE m_status&
~@win_open_dialog(prg_modal_var&,checks&,iconify_icon_1&)
CASE m_radios&
~@win_open_dialog(prg_modal_var&,radios&,iconify_icon_1&)
CASE m_input&
~@win_open_dialog(prg_modal_var&,input&,iconify_icon_1&)
CASE m_popups&
~@win_open_dialog(prg_modal_var&,popups&,iconify_icon_1&)
CASE m_listboxes&
~@win_open_dialog(prg_modal_var&,listbxes&,iconify_icon_1&)
CASE m_multistate&
~@win_open_dialog(prg_modal_var&,mstate&,iconify_icon_1&)
CASE m_resize&
~@win_open_dialog(prg_modal_var&,resize_me&,iconify_icon_1&)
CASE m_foldable&
~@win_open_dialog(prg_modal_var&,foldable&,iconify_icon_1&)
CASE m_other&
~@win_open_dialog(prg_modal_var&,other&,iconify_icon_1&)
CASE menu_ascii&
~@win_open_dialog(4,fvt_asci&,-1)
CASE menu_alerts&
IF @alert_wind(1,alert_1&,"")=1
~@alert_wind(1,alert_3&,"")=1
ENDIF
CASE menu_progress&
@progress_open("New: Title!",-1)
FOR albert&=0 TO 4000
EXIT IF @progress_update(INT(albert&/40))
NEXT albert&
@progress_close
CASE menu_busy&
time&=@busy_open(TRUE)
FOR a&=0 TO 4000
EXIT IF @busy_update(time&)
NEXT a&
@busy_close
CASE demo_simple_win&
~@win_open(" Standard window "," Info line...",simple_window%,backgrnd&,800,800,16,16,12,0,0,800,800,iconify_icon_1&)
CASE demo_hor_tlstrip&
~@win_open(" Toolstrip window ","",toolstrip_window%,toolstrip&,800,800,16,16,12,0,0,800,800,iconify_icon_1&)
CASE demo_ver_toolbar&
~@win_open(" Toolbar window ","",toolbar_window%,toolbar&,800,800,16,16,12,0,0,800,800,iconify_icon_1&)
CASE demo_menu_window&
@open_text_window
CASE iconify_all&
@win_iconify_all
CASE uniconify_all&
@win_uniconify_all
ENDSELECT
ENDSELECT
RETURN
So einfach funktioniert die Ausgabe Fenster. Die folgende Routine
wird zum Zeichnen der Fensterinhalte aufgerufen (diese Userfenster-
Funktion ist nur in der faceVALUE-Vollversion verfügbar):
PROCEDURE user_window_content(index&,userhandle&,off_x%,off_y%,cx&,cy&,cw&,ch&)
'
' Kreise Zeichnen
'
LOCAL a&
SELECT userhandle&
CASE 12
FOR a&=95 TO 395 STEP 100
CIRCLE 400-off_x%,400-off_y%,a&
NEXT a&
ENDSELECT
'
RETURN
Zum Schluß mußten noch die beiden Prozeduren erstellt werden, um dem
Textfenster einen Fontselektor zu verpassen:
PROCEDURE open_text_window
LOCAL handle&,index& !locals
LET handle&=@textlist_win_open(" System font at 10 points ","",0,3,window_menu&,42,-1,-1,-1,-1,iconify_icon_1&,txt%,txt$())
IF handle&>0 !if window opened
index&=@win_get_index(handle&) !find index
num_fonts&=@vdi_load_fonts(window_array&(index&,22)) !load fonts
' these are the extended window_array&() entries:
window_array&(index&,26)=1 !initial font id
window_array&(index&,27)=10 !initial font size
@textlist_resize(index&,txt%,txt$())
ENDIF
RETURN
PROCEDURE change_font(index&)
LOCAL id&,size&,wcell&,hcell&,ret%,x&,y&,w&,h&,name$,handle&,fontflags&
IF index&=-1 !if called by shortcut
~WIND_GET(0,10,handle&,d&,d&,d&) !get the top window (the window whose shortcut was used)
index&=@win_get_index(handle&) !find <index&> for this window
ENDIF
id&=window_array&(index&,26) !find font id
size&=window_array&(index&,27) !find font size
'
' 1=include systemfont
' 2=include monospaced
' 4=include proportional
' 8=include bitmap
' 240=include vector
' 254=include all
fontflags&=254 !include all
'
ret%=@xfsl(window_array&(index&,22),"Choose font",fontflags&,num_fonts&,name$,id&,size&,wcell&,hcell&)
IF ret%=1 !if new font/size selected
@win_set_title(index&," "+name$+" "+STR$(size&)+" points ") !set title of window
' then fill the extended window_array&() entries correctly:
window_array&(index&,26)=id& !new font id
window_array&(index&,27)=size& !new font size
' update the window:
@textlist_resize(index&,txt%,txt$())
@win_send_redraw(index&,-1,-1,-1,-1) !redraw window
ENDIF
RETURN